using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._CrimeAnalysisandSafetyTools
{
    /// <summary>
    /// <para>Summarize Incident Count</para>
    /// <para>Creates a feature class with coincident point counts. Coincident point counts for line and point features are determined by a specified maximum distance. Point counts for polygon features are determine by whether point features or portions of features overlap with the polygon feature.</para>
    /// <para>创建具有重合点计数的要素类。线要素和点要素的重合点计数由指定的最大距离确定。面要素的点计数取决于点要素或要素的一部分是否与面要素重叠。</para>
    /// </summary>    
    [DisplayName("Summarize Incident Count")]
    public class SummarizeIncidentCount : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SummarizeIncidentCount()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input features to which coincident point counts will be calculated.</para>
        /// <para>将计算重合点计数的输入要素。</para>
        /// </param>
        /// <param name="_in_sum_features">
        /// <para>Input Summary Features</para>
        /// <para>The point features coincident with the input features.</para>
        /// <para>点特征与输入特征重合。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The output choropleth count feature class, symbolized by total count.</para>
        /// <para>输出分区统计计数要素类，由总计数符号化。</para>
        /// </param>
        public SummarizeIncidentCount(object _in_features, object _in_sum_features, object _out_feature_class)
        {
            this._in_features = _in_features;
            this._in_sum_features = _in_sum_features;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Crime Analysis and Safety Tools";

        public override string ToolName => "Summarize Incident Count";

        public override string CallName => "ca.SummarizeIncidentCount";

        public override List<string> AcceptEnvironments => ["MDomain", "MResolution", "MTolerance", "XYDomain", "XYResolution", "XYTolerance", "ZDomain", "ZResolution", "ZTolerance", "autoCommit", "configKeyword", "extent", "geographicTransformations", "maintainAttachments", "outputCoordinateSystem", "outputMFlag", "outputZFlag", "qualifiedFieldNames", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_features, _in_sum_features, _out_feature_class, _search_radius, _group_field];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input features to which coincident point counts will be calculated.</para>
        /// <para>将计算重合点计数的输入要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Input Summary Features</para>
        /// <para>The point features coincident with the input features.</para>
        /// <para>点特征与输入特征重合。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Summary Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_sum_features { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The output choropleth count feature class, symbolized by total count.</para>
        /// <para>输出分区统计计数要素类，由总计数符号化。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Search Radius</para>
        /// <para><xdoc>
        ///   <para>The maximum distance from an Input Features point or line that a point feature will be considered coincident.</para>
        ///   <para>This parameter is not active when the Input Features is a polygon.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>与输入要素点或线的最大距离，该点或线将被视为重合。</para>
        ///   <para>当输入要素为面时，此参数处于非活动状态。</para>
        /// </xdoc></para>
        /// <para>单位： Meters | Millimeters | Centimeters | Inches | Points | Feet | Yards </para>
        /// </summary>
        [DisplayName("Search Radius")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _search_radius { get; set; } = null;


        /// <summary>
        /// <para>Group Field</para>
        /// <para>A field containing the value used to split point counts. Additional fields containing counts for each unique value in the group field will be generated.</para>
        /// <para>包含用于拆分点计数的值的字段。将生成包含组字段中每个唯一值的计数的其他字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Group Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _group_field { get; set; } = null;


        public SummarizeIncidentCount SetEnv(object MDomain = null, object MResolution = null, object MTolerance = null, object XYDomain = null, object XYResolution = null, object XYTolerance = null, object ZDomain = null, object ZResolution = null, object ZTolerance = null, int? autoCommit = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object outputMFlag = null, object outputZFlag = null, bool? qualifiedFieldNames = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(MDomain: MDomain, MResolution: MResolution, MTolerance: MTolerance, XYDomain: XYDomain, XYResolution: XYResolution, XYTolerance: XYTolerance, ZDomain: ZDomain, ZResolution: ZResolution, ZTolerance: ZTolerance, autoCommit: autoCommit, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, outputMFlag: outputMFlag, outputZFlag: outputZFlag, qualifiedFieldNames: qualifiedFieldNames, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}